/*
 * @Description: 
 * @Author: rendc
 * @Date: 2025-03-18 09:23:59
 * @LastEditors: rendc
 * @LastEditTime: 2025-03-18 09:35:52
 */
/*
 * @Description: 提供反转字符串的服务
 * @Author: rendc
 * @Date: 2025-03-17 14:46:24
 * @LastEditors: rendc
 * @LastEditTime: 2025-03-18 09:18:35
 */

import java.io.InputStream;
import java.io.OutputStream;
import java.net.ServerSocket;
import java.net.Socket;

public class RTcpServer {
  public static void main(String[] args) throws Exception {
    // 创建服务器对象 指定程序端口
    ServerSocket server = new ServerSocket(8888);
    System.out.println("服务器：启动成功，等待客户端连接");
    // System.out.println("服务器：启动成功" + server);
    // 等待客户端连接 - 程序阻塞
    Socket client = server.accept();
    System.out.println("服务器：客户端连接成功");
    // System.out.println("服务器：客户端连接成功：" + client);
    // 创建IO流对象
    InputStream is = client.getInputStream();
    OutputStream os = client.getOutputStream();
    // 服务器端接收客户端发送的内容
    byte[] b = new byte[1024];
    StringBuffer stringBuffer = new StringBuffer();
    while (true) {
      // 删除stringBuffer之前存的元素
      stringBuffer.delete(0, stringBuffer.length());
      int length = is.read(b);
      if (length != -1) {
        // 输出读到的内容 - 解析数组
        // 提取收到的字符串
        String oldStr = new String(b, 0, length);
        System.out.println("服务器：接收到的数据" + oldStr);
        // 如果是 quit 结束程序
        if ("quit".equals(oldStr)) {
          break;
        }
        // 反转字符串
        stringBuffer.append(oldStr);
        stringBuffer.reverse();
        System.out.println("服务器：反转后的数据" + stringBuffer);
      }
      // 服务器端收到客户端的数据之后给客户端发送消息
      // "hello,client,我是Server"
      // String msg = "hello,client,我是Server";
      String msg = stringBuffer.toString();
      // System.out.println("服务器：转换后的msg：" + msg);
      os.write(msg.getBytes());
    }
    // 关闭资源
    System.out.println("服务器：即将关闭");
    is.close();
    os.close();
    client.close();
    server.close();
  }
}